/**
 * 解决函子传undefind和null会出现错误（副作用）
 */
class Mybe {
  static of(value) {
    return new Mybe(value);
  }

  constructor(value) {
    this._value = value;
  }

  map(fn) {
    return this.isNothing() ? new Mybe(null) : new Mybe(fn(this._value));
  }

  isNothing() {
    return this._value === undefined || this._value === null;
  }
}
const f = Mybe.of("HELLO WORD").map(x=>null).map(x=>x.toLowerCase());
console.log(f)